package entretenimiento.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import entretenimiento.excepcion.DAOExcepcion;
import entretenimiento.modelo.Ofertas;
import entretenimiento.util.ConexionBD;
import entretenimiento.dao.BaseDAO;

public class OfertasDAO extends BaseDAO {
	
	public Ofertas insertar(Ofertas ofer) throws DAOExcepcion {
		String query = "insert into oferta(NoOferta,Logistica,Porcentaje,FeInicio,FeCaducidad,TxtDescripcion,CoUbicacion, FlEstado) values (?,?,?,?,?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, ofer.getNoOferta());
			stmt.setInt(2, ofer.getLogistica());
			stmt.setInt(3, ofer.getPorcentaje());
			stmt.setString(4, ofer.getFeInicio());
			stmt.setString(5, ofer.getFeCaducidad());
			stmt.setString(6, ofer.getTxtDescripcion());
			stmt.setInt(7, ofer.getCoUbicacion());
			stmt.setInt(8, ofer.getFlEstado());
					
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
			int id = 0;
			query = "select last_insert_id()";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			if (rs.next()) {
				id = rs.getInt(1);
			}
			ofer.setCoOferta(id);
			
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return ofer;
	}

	public Ofertas obtener(String NoOferta) throws DAOExcepcion {
		Ofertas ofer = new Ofertas();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select CoOferta, NoOferta, Logistica, Porcentaje, FeInicio, FeCaducidad,TxtDescripcion,CoUbicacion,FlEstado from oferta where NoOferta=?";
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, NoOferta);
			rs = stmt.executeQuery();
			if (rs.next()) {
				ofer.setCoOferta(rs.getInt(1));
				ofer.setNoOferta(rs.getString(2));
				ofer.setLogistica(rs.getInt(3));
				ofer.setPorcentaje(rs.getInt(4));
				ofer.setFeInicio(rs.getString(5));
				ofer.setFeCaducidad(rs.getString(6));
				ofer.setTxtDescripcion(rs.getString(7));
				ofer.setCoUbicacion(rs.getInt(8));
				ofer.setFlEstado(rs.getInt(9));
				}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return ofer;
	}
	
	public Ofertas actualizar(Ofertas ofer) throws DAOExcepcion {
		String query = "update oferta set NoOferta=?,Logistica=?, Porcentaje=?,FeInicio=?,FeCaducidad=?,TxtDescripcion=?,CoUbicacion=?, FlEstado=? where CoOferta=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, ofer.getNoOferta());
			stmt.setInt(2, ofer.getLogistica());
			stmt.setInt(3, ofer.getPorcentaje());
			stmt.setString(4, ofer.getFeInicio());
			stmt.setString(5, ofer.getFeCaducidad());
			stmt.setString(6, ofer.getTxtDescripcion());
			stmt.setInt(7, ofer.getCoUbicacion());
			stmt.setInt(8, ofer.getFlEstado());
			stmt.setInt(9, ofer.getCoOferta());
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("Registro no Existe... No se pudo actualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return ofer;
	}
	
	public Collection<Ofertas> listar() throws DAOExcepcion {
		Collection<Ofertas> collec = new ArrayList<Ofertas>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "select CoOferta, NoOferta, Logistica, Porcentaje, FeInicio, FeCaducidad,TxtDescripcion,CoUbicacion, FlEstado from oferta where CoOferta=?";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Ofertas ofer = new Ofertas();
				ofer.setCoOferta(rs.getInt(1));
				ofer.setNoOferta(rs.getString(2));
				ofer.setLogistica(rs.getInt(3));
				ofer.setPorcentaje(rs.getInt(4));
				ofer.setFeInicio(rs.getString(5));
				ofer.setFeCaducidad(rs.getString(6));
				ofer.setTxtDescripcion(rs.getString(7));
				ofer.setCoUbicacion(rs.getInt(8));
				ofer.setFlEstado(rs.getInt(9));
				collec.add(ofer);
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return collec;
	}

	public int VerificarExistencia(int CoOferta, String NoOferta ) throws DAOExcepcion {
		int var=0;
		//Ofertas ofer = new Ofertas();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select count(*) from oferta where NoOferta=? and CoOferta<>?";
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, NoOferta);
			stmt.setInt(2, CoOferta);
			rs = stmt.executeQuery();
			if (rs.next()) {
				var=rs.getInt(1);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return var;
	}
		
	public Ofertas obtenerReg(int CoOferta) throws DAOExcepcion {
		
		Ofertas ofer = new Ofertas();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select CoOferta from oferta where FlEstado=0 and  CoOferta=?";
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, CoOferta);
			
			rs = stmt.executeQuery();
			if (rs.next()) {
				ofer.setCoOferta(rs.getInt(1));
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return ofer;
	}	
	
	public Collection<Ofertas> Listar(int CoOferta) throws DAOExcepcion {
		Collection<Ofertas> listado = new ArrayList<Ofertas>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
		    con = ConexionBD.obtenerConexion();
			String query = "select CoOferta, NoOferta, Logistica, Porcentaje, FeInicio, FeCaducidad,TxtDescripcion,CoUbicacion,FlEstado from oferta where FlEstado=0 and CoOferta=?";
			stmt = con.prepareStatement(query);
			stmt.setInt(1, CoOferta);
			rs = stmt.executeQuery();
			 while (rs.next()) {
			    Ofertas of = new Ofertas();
				of.setCoOferta(rs.getInt(1));
				of.setNoOferta(rs.getString(2));
				of.setLogistica(rs.getInt(3));
				of.setPorcentaje(rs.getInt(4));
				of.setFeInicio(rs.getString(5));
				of.setFeCaducidad(rs.getString(6));
				of.setTxtDescripcion(rs.getString(7));
				of.setCoUbicacion(rs.getInt(8));
				of.setFlEstado(rs.getInt(9));
				listado.add(of);
				}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return listado;
	}
	
		
	public void eliminar(int CoOferta) throws DAOExcepcion {
		String query = "update oferta set FlEstado = 0 where CoOferta=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, CoOferta);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar");
			}
				
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}


	
	public Collection<Ofertas> listarByFechas(java.util.Date feinicio, java.util.Date fecaducidad) throws DAOExcepcion {
		Collection<Ofertas> collec = new ArrayList<Ofertas>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "select CoOferta, NoOferta,Logistica, Porcentaje, FeInicio, FeCaducidad,TxtDescripcion,CoUbicacion, FlEstado from oferta where FeInicio=? and FeCaducidad=?";
			stmt = con.prepareStatement(query);
			stmt.setString(1, feinicio.toString());
			stmt.setString(2, fecaducidad.toString());
			rs = stmt.executeQuery();
			while (rs.next()) {
				Ofertas ofer = new Ofertas();
				ofer.setCoOferta(rs.getInt(1));
				ofer.setNoOferta(rs.getString(2));
				ofer.setLogistica(rs.getInt(3));
				ofer.setPorcentaje(rs.getInt(4));
				ofer.setFeInicio(rs.getString(5));
				ofer.setFeCaducidad(rs.getString(6));
				ofer.setTxtDescripcion(rs.getString(7));
				ofer.setCoUbicacion(rs.getInt(8));
				ofer.setFlEstado(rs.getInt(9));
				collec.add(ofer);
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return collec;
	}
}

	